package com.sc.utils;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
 * bean转map集合工具类
 */
public class BeanToMap {
    /**
     * 将bean转为map（包含其父类属性）
     *
     * @param entity bean对象
     * @param <T>    泛型，bean对象类型
     * @return map集合
     */
    public static <T> Map<String, Object> getMap(T entity) {
        Map<String, Object> map = new HashMap<>();
        Class<?> clazz = entity.getClass();

        // 递归地遍历类继承树
        while (clazz != null) {
            // 获取当前类的所有字段
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                String key = field.getName();
                Object value = null;
                try {
                    // 设置字段为可访问
                    field.setAccessible(true);
                    value = field.get(entity);
                } catch (IllegalAccessException e) {
                    throw new RuntimeException(e);
                }
                map.put(key, value);
            }
            // 移动到父类
            clazz = clazz.getSuperclass();
        }

        return map;
    }
}
